from ast import arg
from core.basic.skill import 技能
from core.basic.character import Character
from core.basic.skill import 主动技能, 被动技能


class 技能0(被动技能):
    名称 = '基础精通'
    倍率 = 1.0
    所在等级 = 1
    等级上限 = 200
    等级精通 = 110
    关联技能 = ['帝国剑术']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(self.倍率 * (0.463 + 0.089 * self.等级), 5)


class 技能1(主动技能):
    名称 = '帝国剑术'
    备注 = '(TP为基础精通)'
    所在等级 = 1
    等级上限 = 1
    基础等级 = 1
    MP = [6, 140]
    # 巨剑 180.53+205.90+127.83
    data0 = [int(i) for i in [0, 514.25]]
    hit0 = 1
    # 太刀 122.81+170.41+195.72
    data1 = [int(i) for i in [0, 486.67]]
    hit1 = 1
    # 短剑 (69.16+74.22+80.97+86.03)*2
    data2 = [int(i) for i in [0, 310.37]]
    hit2 = 2
    # 钝器 102.14+153.95+179.12+76.98
    data3 = [int(i) for i in [0, 512.19]]
    hit3 = 1
    CD = 1.0  # 实际没有
    TP成长 = 0.10
    TP上限 = 5

    def 等效百分比(self, **argv):
        武器类型 = argv.get('武器类型', '')
        if 武器类型 == '巨剑':
            self.hit0 = 1
            self.hit1 = 0
            self.hit2 = 0
            self.hit3 = 0
        if 武器类型 == '太刀':
            self.hit0 = 0
            self.hit1 = 1
            self.hit2 = 0
            self.hit3 = 0
        if 武器类型 == '短剑':
            self.hit0 = 0
            self.hit1 = 0
            self.hit2 = 2
            self.hit3 = 0
        if 武器类型 == '钝器':
            self.hit0 = 0
            self.hit1 = 0
            self.hit2 = 0
            self.hit3 = 1
        return super().等效百分比(**argv)


class 技能2(主动技能):
    名称 = '魔剑降临'
    备注 = '火冰光为次数，暗为秒伤'
    所在等级 = 15
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60
    MP = [94, 1029]
    # 火
    data0 = [int(i) for i in [0, 96, 105, 115, 124, 134, 143, 154, 163, 173, 182, 192, 201, 212, 221, 231, 240, 250, 259, 270, 279, 289, 298, 308, 317, 328, 337, 347, 356, 366, 375, 386, 395, 405,
                              414, 423, 434, 443, 453, 462, 472, 481, 492, 501, 511, 520, 530, 539, 550, 559, 569, 578, 588, 597, 608, 617, 627, 636, 646, 655, 666, 675, 685, 694, 704, 713, 724, 733, 743, 752, 762]]
    hit0 = 1
    # 冰
    data1 = [int(i) for i in [0, 96, 105, 115, 124, 134, 143, 154, 163, 173, 182, 192, 201, 212, 221, 231, 240, 250, 259, 270, 279, 289, 298, 308, 317, 328, 337, 347, 356, 366, 375, 386, 395, 405,
                              414, 423, 434, 443, 453, 462, 472, 481, 492, 501, 511, 520, 530, 539, 550, 559, 569, 578, 588, 597, 608, 617, 627, 636, 646, 655, 666, 675, 685, 694, 704, 713, 724, 733, 743, 752, 762]]
    hit1 = 0
    # 光
    data2 = [int(i) for i in [0, 27, 30, 33, 35, 39, 41, 43, 47, 49, 52, 55, 58, 60, 63, 66, 68, 72, 74, 77, 80, 82, 85, 88, 91, 93, 97, 99, 101, 105, 107, 110, 113, 116, 118, 121,
                              124, 126, 130, 132, 135, 138, 140, 143, 146, 149, 151, 155, 157, 159, 163, 165, 168, 171, 174, 176, 179, 182, 184, 188, 190, 193, 196, 198, 201, 204, 207, 209, 213, 215, 217]]
    hit2 = 0
    # 暗 dot伤害，按秒伤看叠满两层是每秒4段
    data3 = [int(i) for i in [0, 63, 69, 76, 82, 89, 96, 101, 108, 114, 121, 127, 133, 140, 147, 152, 159, 165, 172, 179, 184, 191, 198, 204, 210, 216, 223, 230, 236, 242, 249, 255, 262, 267,
                              274, 281, 287, 294, 300, 306, 313, 319, 325, 332, 338, 345, 352, 357, 364, 370, 377, 383, 389, 396, 403, 408, 415, 421, 428, 435, 440, 447, 454, 460, 466, 472, 479, 486, 492, 498, 505]]
    hit3 = 0
    TP成长 = 0.1
    TP上限 = 7
    CD = 1  # 对于火冰光无实际CD，对于暗就是秒伤

    形态 = ["火", "冰", "光", "暗"]

    def 形态变更(self, 形态, char: Character):
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        if 形态 == "火":
            self.hit0 = 1
            self.hit1 = 0
            self.hit2 = 0
            self.hit3 = 0
        if 形态 == "冰":
            self.hit0 = 0
            self.hit1 = 1
            self.hit2 = 0
            self.hit3 = 0
        if 形态 == "光":
            self.hit0 = 0
            self.hit1 = 0
            self.hit2 = 3
            self.hit3 = 0
        if 形态 == "暗":
            self.hit0 = 0
            self.hit1 = 0
            self.hit2 = 0
            self.hit3 = 4

    def 等效CD(self, **argv):
        return 1.0


class 技能3(被动技能):
    名称 = '毁灭之巨剑精通'
    所在等级 = 15
    等级上限 = 40
    基础等级 = 30
    关联技能 = ['所有']
    关联技能1 = ['所有']
    关联技能2 = ['破军旋舞斩']
    关联技能3 = ['帝国剑术']
    data1 = [0, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210,
             220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490, 510]
    data2 = [0, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 246, 252, 258, 264, 270,
             276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360, 366, 372, 378, 384, 390, 396]
    data3 = [0, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 16, 16, 16, 17, 17,
             18, 18, 18, 19, 19, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26]
    data4 = [0, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47,
             47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57]

    def 物理攻击力倍率(self, 武器类型):
        if 武器类型 != '巨剑':
            return 1.0
        else:
            return 1 + self.data1[self.等级] / 1000

    def 加成倍率1(self, 武器类型):
        if 武器类型 != '巨剑':
            return 1.0
        else:
            return 1 + self.data2[self.等级] / 1000

    # 破军圆舞斩
    def 加成倍率2(self, 武器类型):
        if 武器类型 != '巨剑':
            return 1.0
        else:
            return 1 + self.data3[self.等级] / 100

    # 帝国剑术
    def 加成倍率3(self, 武器类型):
        if 武器类型 != '巨剑':
            return 1.0
        else:
            return 1.36

    # 恶即斩终结
    def 额外倍率1(self):
        return 1 + self.data4[self.等级] / 100


class 技能4(被动技能):
    名称 = '血影之太刀精通'
    所在等级 = 15
    等级上限 = 40
    基础等级 = 30
    关联技能 = ['所有']
    关联技能1 = ['所有']
    非关联技能1 = ['帝国剑术', '魔剑降临']
    关联技能2 = ['魔剑降临']
    关联技能3 = ['帝国剑术']
    冷却关联技能 = ['所有']
    data1 = [0, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210,
             220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490, 510]
    data2 = [0, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29,
             29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39]
    data3 = [0, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19,
             19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29]

    def 物理攻击力倍率(self, 武器类型):
        if 武器类型 != '太刀':
            return 1.0
        else:
            return 1 + self.data1[self.等级] / 1000

    # 柔化加成
    def 加成倍率1(self, 武器类型):
        if 武器类型 != '太刀':
            return 1.0
        else:
            return 1 + self.data2[self.等级] / 100

    # 魔剑降临
    def 加成倍率2(self, 武器类型):
        if 武器类型 != '太刀':
            return 1.0
        else:
            return 1 + self.data3[self.等级] / 100

    # 帝国剑术
    def 加成倍率3(self, 武器类型):
        if 武器类型 != '太刀':
            return 1.0
        else:
            return 1.26

    def CD缩减倍率(self, 武器类型):
        if self.等级 == 0 or 武器类型 != '太刀':
            return 1.0
        else:
            return 0.9


class 技能5(被动技能):
    名称 = '魔性之短剑精通'
    所在等级 = 15
    等级上限 = 40
    基础等级 = 30
    关联技能 = ['所有']
    关联技能1 = ['所有']
    冷却关联技能 = ['魔剑奥义']
    data1 = [0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220,
             230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 340, 360, 380, 400, 420, 440, 460, 480, 500, 520]
    data2 = [0, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265,
             270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370]
    data3 = [0, 34, 35, 37, 38, 40, 41, 42, 44, 45, 47, 48, 50, 51, 53, 54, 56, 57, 58, 60,
             61, 63, 64, 66, 67, 69, 70, 71, 73, 74, 76, 77, 79, 80, 82, 83, 85, 86, 87, 88, 89]
    data4 = [0, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135,
             140, 145, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235]

    def 物理攻击力倍率(self, 武器类型):
        if 武器类型 != '短剑':
            return 1.0
        else:
            return 1 + self.data1[self.等级] / 1000

    def 加成倍率1(self, 武器类型):
        if 武器类型 != '短剑':
            return 1.0
        else:
            return 1 + self.data2[self.等级] / 1000

    def CD缩减倍率(self, 武器类型):
        if 武器类型 != '短剑':
            return 1.0
        else:
            return 1 - self.data3[self.等级] / 100

    # 瞬影三绝斩异常伤害
    def 额外倍率1(self):
        return 1 + self.data4[self.等级] / 100


class 技能6(被动技能):
    名称 = '波动之钝器精通'
    所在等级 = 15
    等级上限 = 40
    基础等级 = 30
    关联技能 = ['所有']
    关联技能1 = ['所有']
    关联技能2 = ['雷鸣千军破']
    data1 = [0, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210,
             220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490, 510]
    data2 = [0, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275,
             280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370, 375, 380]
    data3 = [0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
             27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]
    data4 = [0, 11, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 26, 27, 29, 30, 31, 33, 34, 35,
             37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54, 56, 57, 58, 60, 61, 63, 64]
    data5 = [0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
             27, 28, 29, 30, 31, 32, 33, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]

    def 物理攻击力倍率(self, 武器类型):
        if 武器类型 != '钝器':
            return 1.0
        else:
            return 1 + self.data1[self.等级] / 1000

    def 加成倍率1(self, 武器类型):
        if 武器类型 != '钝器':
            return 1.0
        else:
            return 1 + self.data2[self.等级] / 1000

    # 雷鸣千军破
    def 加成倍率2(self, 武器类型):
        if 武器类型 != '钝器':
            return 1.0
        else:
            return 1 + self.data3[self.等级] / 100

    # 幻剑术冲击波
    def 额外倍率1(self):
        return 1 + self.data4[self.等级] / 100

    # 穿云破空剑冲击波
    def 额外倍率2(self):
        return 1 + self.data5[self.等级] / 100


class 技能7(主动技能):
    名称 = '疾影斩'
    所在等级 = 20
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60
    MP = [20, 210]
    data0 = [int(i*1.052) for i in [0, 3035, 3342, 3650, 3959, 4266, 4575, 4882, 5190, 5498, 5805, 6113, 6421, 6730, 7038, 7346, 7653, 7961, 8269, 8576, 8885, 9194, 9501, 9809, 10117, 10424, 10732, 11041, 11348, 11656, 11965, 12272, 12580, 12888, 13196,
                                    13504, 13812, 14119, 14427, 14736, 15043, 15352, 15660, 15967, 16275, 16583, 16890, 17198, 17507, 17815, 18123, 18431, 18738, 19046, 19354, 19661, 19971, 20278, 20586, 20894, 21201, 21509, 21817, 22125, 22433, 22742, 23049, 23357, 23665, 23972, 24281]]
    hit0 = 1
    CD = 7.0
    TP成长 = 0.10
    TP上限 = 7


class 技能8(主动技能):
    名称 = '幻剑术'
    所在等级 = 25
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60
    MP = [30, 350]
    data0 = [int(i*1.054) for i in [0, 751, 827, 903, 980, 1055, 1132, 1208, 1285, 1362, 1436, 1513, 1589, 1666, 1742, 1818, 1895, 1970, 2047, 2122, 2199, 2276, 2352, 2427, 2503, 2580, 2657, 2733, 2809, 2884, 2961, 3038, 3114, 3190,
                                    3266, 3343, 3420, 3494, 3571, 3647, 3724, 3801, 3876, 3953, 4028, 4105, 4181, 4257, 4334, 4410, 4487, 4562, 4638, 4715, 4791, 4867, 4942, 5019, 5096, 5172, 5248, 5324, 5401, 5478, 5553, 5629, 5705, 5782, 5859, 5934, 6010]]
    hit0 = 6
    # 钝器冲击波
    data1 = [int(i*1.054) for i in [0, 187, 206, 225, 245, 264, 283, 302, 320, 340, 359, 378, 397, 416, 436, 455, 474, 493, 512, 530, 549, 568, 587, 606, 626, 645, 664, 683, 702, 721, 740, 759, 778, 797, 817, 836,
                                    855, 874, 893, 912, 931, 950, 969, 988, 1006, 1027, 1046, 1065, 1083, 1102, 1121, 1140, 1159, 1178, 1197, 1217, 1236, 1255, 1274, 1293, 1313, 1331, 1350, 1369, 1388, 1408, 1427, 1446, 1465, 1484, 1504]]
    hit1 = 0
    CD = 8.0
    TP成长 = 0.10
    TP上限 = 7

    def 等效百分比(self, **argv):
        武器类型 = argv.get('武器类型', '')
        char: Character = argv.get('char', {})
        if 武器类型 == '钝器':
            self.hit0 = 6
            self.hit1 = 6
            self.power1 = char.get_skill_by_name("波动之钝器精通").额外倍率1()
        else:
            self.hit0 = 6
            self.hit1 = 0
            return super().等效百分比(**argv)


class 技能9(主动技能):
    名称 = '升龙剑'
    所在等级 = 25
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60
    MP = [30, 350]
    data0 = [int(i*1.051) for i in [0, 800, 882, 963, 1045, 1126, 1208, 1289, 1371, 1452, 1534, 1613, 1695, 1776, 1858, 1939, 2021, 2102, 2183, 2265, 2345, 2427, 2508, 2590, 2670, 2752, 2833, 2915, 2996, 3078, 3158, 3240, 3321, 3403,
                                    3484, 3566, 3647, 3729, 3809, 3891, 3971, 4053, 4134, 4215, 4297, 4378, 4460, 4541, 4623, 4704, 4785, 4865, 4947, 5028, 5110, 5191, 5273, 5354, 5436, 5516, 5598, 5679, 5761, 5842, 5924, 6004, 6086, 6167, 6247, 6329, 6410]]
    hit0 = 4
    data1 = [int(i*1.051) for i in [0, 1508, 1661, 1813, 1968, 2120, 2274, 2426, 2579, 2732, 2886, 3038, 3192, 3344, 3498, 3650, 3803, 3957, 4110, 4262, 4416, 4568, 4722, 4876, 5028, 5182, 5334, 5486, 5640, 5794, 5947, 6100, 6252, 6406, 6558,
                                    6711, 6865, 7018, 7171, 7324, 7476, 7630, 7783, 7936, 8089, 8242, 8395, 8548, 8700, 8855, 9007, 9160, 9313, 9466, 9619, 9773, 9926, 10079, 10232, 10384, 10538, 10690, 10844, 10997, 11150, 11303, 11456, 11608, 11763, 11915, 12068]]
    hit1 = 1
    CD = 8.0
    TP成长 = 0.10
    TP上限 = 7


class 技能10(主动技能):
    名称 = '穿云破空剑'
    所在等级 = 30
    等级上限 = 70
    学习间隔 = 3
    等级精通 = 60
    MP = [60, 390]
    data0 = [int(i*1.054) for i in [0, 910, 1056, 1200, 1346, 1492, 1636, 1781, 1925, 2071, 2217, 2361, 2507, 2653, 2797, 2943, 3089, 3233, 3379, 3523, 3668, 3814, 3958, 4104, 4250, 4394, 4540, 4684, 4830, 4976, 5120, 5266, 5411, 5555,
                                    5701, 5845, 5991, 6137, 6281, 6427, 6573, 6717, 6863, 7009, 7153, 7298, 7442, 7588, 7734, 7878, 8024, 8170, 8314, 8460, 8604, 8750, 8896, 9040, 9185, 9331, 9475, 9621, 9765, 9911, 10057, 10201, 10347, 10493, 10637, 10783, 10929]]
    hit0 = 1
    data1 = [int(i*1.054) for i in [0, 609, 706, 804, 901, 997, 1095, 1192, 1290, 1387, 1485, 1581, 1679, 1776, 1874, 1971, 2068, 2164, 2262, 2359, 2456, 2554, 2650, 2748, 2845, 2943, 3040, 3138, 3234, 3332, 3428, 3526, 3623, 3721,
                                    3817, 3914, 4012, 4109, 4207, 4303, 4401, 4498, 4596, 4693, 4790, 4886, 4984, 5081, 5179, 5276, 5372, 5470, 5567, 5665, 5762, 5860, 5956, 6054, 6151, 6248, 6345, 6443, 6539, 6637, 6734, 6831, 6929, 7025, 7123, 7220, 7318]]
    hit1 = 8
    data1 = [int(i*1.054) for i in [0, 715, 829, 944, 1057, 1172, 1285, 1399, 1513, 1628, 1741, 1855, 1971, 2084, 2198, 2311, 2426, 2540, 2654, 2769, 2882, 2997, 3110, 3225, 3338, 3452, 3568, 3681, 3795, 3908, 4024, 4137, 4251, 4364,
                                    4479, 4594, 4707, 4822, 4935, 5050, 5163, 5278, 5392, 5506, 5621, 5734, 5848, 5961, 6077, 6191, 6304, 6419, 6533, 6647, 6760, 6875, 6988, 7103, 7218, 7331, 7445, 7559, 7674, 7787, 7901, 8014, 8130, 8244, 8357, 8472, 8587]]
    hit2 = 1
    CD = 12.0
    TP成长 = 0.10
    TP上限 = 7

    def TP加成(self):
        return 1.0

    def 等效百分比(self, **argv):
        武器类型 = argv.get('武器类型', '')
        char: Character = argv.get('char', {})
        if self.TP等级 > 0:
            self.hit1 = 8+self.TP等级
            if 武器类型 == '钝器':
                self.power2 = char.get_skill_by_name("波动之钝器精通").额外倍率2('')
        else:
            self.hit1 = 8
            if 武器类型 == '钝器':
                self.power2 = char.get_skill_by_name("波动之钝器精通").额外倍率2('')
        return super().等效百分比(**argv)


class 技能11(主动技能):
    名称 = '魔剑奥义'
    备注 = '单次'
    是否主动 = 0
    所在等级 = 30
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60
    MP = [60, 390]
    # 火
    data0 = [int(i) for i in [0, 745, 820, 896, 971, 1047, 1123, 1198, 1274, 1349, 1425, 1501, 1576, 1652, 1727, 1803, 1879, 1954, 2030, 2105, 2181, 2257, 2332, 2408, 2483, 2559, 2634, 2710, 2786, 2861, 2937, 3012, 3088, 3164,
                              3239, 3315, 3390, 3466, 3542, 3617, 3693, 3768, 3844, 3920, 3995, 4071, 4146, 4222, 4298, 4373, 4449, 4524, 4600, 4676, 4751, 4827, 4902, 4978, 5053, 5129, 5205, 5280, 5356, 5431, 5507, 5583, 5658, 5734, 5809, 5885, 5961]]
    hit0 = 1
    # 冰
    data1 = [int(i) for i in [0, 820, 902, 986, 1068, 1152, 1235, 1318, 1401, 1484, 1568, 1651, 1734, 1817, 1900, 1983, 2067, 2149, 2233, 2316, 2399, 2483, 2565, 2649, 2731, 2815, 2897, 2981, 3065, 3147, 3231, 3313, 3397, 3480,
                              3563, 3647, 3729, 3813, 3896, 3979, 4062, 4145, 4228, 4312, 4395, 4478, 4561, 4644, 4728, 4810, 4894, 4976, 5060, 5144, 5226, 5310, 5392, 5476, 5558, 5642, 5726, 5808, 5892, 5974, 6058, 6141, 6224, 6307, 6390, 6474, 6557]]
    hit1 = 1
    # 光
    data2 = [int(i) for i in [0, 820, 902, 986, 1068, 1152, 1235, 1318, 1401, 1484, 1568, 1651, 1734, 1817, 1900, 1983, 2067, 2149, 2233, 2316, 2399, 2483, 2565, 2649, 2731, 2815, 2897, 2981, 3065, 3147, 3231, 3313, 3397, 3480,
                              3563, 3647, 3729, 3813, 3896, 3979, 4062, 4145, 4228, 4312, 4395, 4478, 4561, 4644, 4728, 4810, 4894, 4976, 5060, 5144, 5226, 5310, 5392, 5476, 5558, 5642, 5726, 5808, 5892, 5974, 6058, 6141, 6224, 6307, 6390, 6474, 6557]]
    hit2 = 1
    # 暗
    data3 = [int(i) for i in [0, 745, 820, 896, 971, 1047, 1123, 1198, 1274, 1349, 1425, 1501, 1576, 1652, 1727, 1803, 1879, 1954, 2030, 2105, 2181, 2257, 2332, 2408, 2483, 2559, 2634, 2710, 2786, 2861, 2937, 3012, 3088, 3164,
                              3239, 3315, 3390, 3466, 3542, 3617, 3693, 3768, 3844, 3920, 3995, 4071, 4146, 4222, 4298, 4373, 4449, 4524, 4600, 4676, 4751, 4827, 4902, 4978, 5053, 5129, 5205, 5280, 5356, 5431, 5507, 5583, 5658, 5734, 5809, 5885, 5961]]
    hit3 = 1
    # TP是减少触发间隔，每级-10%，7级-70%
    TP成长 = 0.1
    TP上限 = 7
    CD = 5
    形态 = ["火/暗", "冰/光", "冰光", "冰火", "火暗", "火冰"]

    def 形态变更(self, 形态, char: Character):
        if char == {}:
            武器类型 = "巨剑"
        else:
            武器类型 = char.武器类型
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        if 武器类型 != '短剑' and len(形态) == 2:
            形态 = 形态[:1]
        if 武器类型 == '短剑' and len(形态) == 3:
            形态 = 形态.replace("/", "")
        if 形态 == "冰光":
            # 火
            self.power0 = 0
            # 冰
            self.power1 = 1.65
            # 光
            self.power2 = 0.25
            # 暗
            self.power3 = 0
        elif 形态 == "冰火":
            # 火
            self.power0 = 0.25
            # 冰
            self.power1 = 1.65
            # 光
            self.power2 = 0
            # 暗
            self.power3 = 0
        elif 形态 == "火暗":
            # 火
            self.power0 = 1.65
            # 冰
            self.power1 = 0
            # 光
            self.power2 = 0
            # 暗
            self.power3 = 0.25
        elif 形态 == "火冰":
            # 火
            self.power0 = 1.65
            # 冰
            self.power1 = 0.25
            # 光
            self.power2 = 0
            # 暗
            self.power3 = 0
        elif 形态 == "火/暗" or 形态 == "火":
            # 火
            self.power0 = 1
            # 冰
            self.power1 = 0
            # 光
            self.power2 = 0
            # 暗
            self.power3 = 0
        elif 形态 == "冰/光" or 形态 == "冰":
            # 火
            self.power0 = 0
            # 冰
            self.power1 = 1
            # 光
            self.power2 = 0
            # 暗
            self.power3 = 0
            pass


class 技能12(被动技能):
    名称 = '魔剑觉醒'
    所在等级 = 30
    等级上限 = 15
    基础等级 = 5

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.035 + 0.015 * self.等级, 5)


class 技能13(主动技能):
    名称 = '瞬影三绝斩'
    所在等级 = 35
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60

    # 剑气本体伤害
    data0 = [int(i*1.051) for i in [0, 2536, 2793, 3052, 3309, 3567, 3823, 4080, 4338, 4595, 4853, 5111, 5367, 5625, 5882, 6140, 6397, 6655, 6912, 7169, 7427, 7684, 7942, 8199, 8456, 8714, 8970, 9229, 9486, 9743, 10001, 10258, 10516, 10772, 11029, 11288,
                                    11545, 11803, 12060, 12316, 12574, 12831, 13089, 13347, 13605, 13862, 14118, 14376, 14633, 14890, 15148, 15406, 15664, 15920, 16178, 16435, 16692, 16950, 17207, 17465, 17722, 17979, 18237, 18494, 18752, 19009, 19265, 19524, 19781, 20039, 20296]]
    hit0 = 3
    # 火 灼伤
    灼伤data0 = [int(i*1.051) for i in [0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                                      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14]]
    灼伤hit0 = 0
    # 冰 冰冻附加伤害，不会单独出伤害数字；计算方式特殊
    # 暂定这样 后面继续测试修改
    data1 = [int(((i*1.051*6)**2)) for i in [0, 149, 165, 180, 195, 210, 230, 245, 260, 275, 290, 305, 320, 335, 355, 365, 385, 400, 415, 430, 445, 460, 475, 490, 510, 525, 540, 555, 570, 585, 600, 615, 630,
                                             645, 665, 680, 695, 710, 725, 740, 755, 770, 785, 805, 820, 835, 850, 865, 880, 895, 910, 925, 945, 960, 975, 990, 1005, 1020, 1035, 1050, 1070, 1085, 1100, 1115, 1130, 1145, 1160, 1175, 1190, 1205, 1225]]
    hit1 = 0
    # 光 感电
    感电data0 = [int(i*1.051) for i in [0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                                      10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14]]
    感电hit0 = 0
    # 暗 冥炎附加伤害，实际无任何作用
    #data2 = [int(i*1.051) for i in [0, 50, 55, 60, 65, 70, 76, 81, 86, 91, 96, 101, 106, 111, 119, 121, 129, 134, 139, 144, 149, 154, 159, 164, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 221, 226, 231, 236, 241, 246, 251, 256, 261, 269, 274, 279, 284, 289, 294, 299, 304, 309, 315, 320, 325, 330, 335, 340, 345, 350, 356, 361, 366, 371, 376, 381, 386, 391, 396, 401, 409]]
    #hit2 = 0
    CD = 15.0
    TP成长 = 0.10
    TP上限 = 5

    MP = [110, 924]
    无色消耗 = 1

    形态 = ["火", "冰", "光", "暗"]

    def 形态变更(self, 形态, char: Character):
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        if 形态 == "火":
            # self.hit0 = 3
            self.灼伤hit0 = 1
            self.hit1 = 0
            self.感电hit0 = 0
        if 形态 == "冰":
            # self.hit0 = 3
            self.灼伤hit0 = 0
            self.hit1 = self.hit0
            self.感电hit0 = 0
        if 形态 == "光":
            # self.hit0 = 3
            self.灼伤hit0 = 0
            self.hit1 = 0
            self.感电hit0 = 1
        if 形态 == "暗":
            # self.hit0 = 3
            self.灼伤hit0 = 0
            self.hit1 = 0
            self.感电hit0 = 0

    def TP加成(self):
        return 1.0

    # 冰额外伤害不受三攻影响，计算公式为
    # 短剑外：伤害 = 6.94*(不计入TP的剑气百分比^2)*(剑心：魔剑觉醒^2)*(魔剑觉醒^2)*(武器精通技攻部分^2)*(TP)*(人剑合一)*(斩魂术)
    # 短剑：伤害 = 6.94*(不计入TP的剑气百分比^2)*(剑心：魔剑觉醒^2)*(魔剑觉醒^2)*(武器精通技攻部分^2)*(TP)*(人剑合一)*(斩魂术)*(短剑精通异常额外加成倍率)
    # 但是当短剑精通等级大于等于25时，短剑精通异常额外加成倍率固定为2.0

    def 等效百分比(self, **argv):
        武器类型 = argv.get('武器类型', '')
        char: Character = argv.get('char', {})
        剑心_魔剑觉醒 = char.get_skill_by_name("剑心：魔剑觉醒")
        魔剑觉醒 = char.get_skill_by_name("魔剑觉醒")
        通用被动倍率 = 剑心_魔剑觉醒.加成倍率('')*魔剑觉醒.加成倍率('') * \
            (1+self.TP成长*self.TP等级) / char.基础面板物理攻击力()
        for item in char.符文:
            if not item is None and item != '':
                skill_name: str = item[0:-1]
                type = item[-1]
                if skill_name == self.名称:
                    # 紫
                    if type == "1":
                        通用被动倍率 *= 1.04
                    # 红
                    if type == "2":
                        通用被动倍率 *= 1.06
                    # 绿
                    if type == "3":
                        通用被动倍率 *= 0.96
        if 武器类型 == "":
            武器类型 = '巨剑'
        # TP加成本体
        self.power0 = 1 + self.TP成长*self.TP等级

        if 武器类型 == "巨剑":
            self.power1 = 通用被动倍率 * char.get_skill_by_name("毁灭之巨剑精通").加成倍率1('')

        if 武器类型 == "太刀":
            # 追加一次攻击
            self.hit0 = 4
            self.power1 = 通用被动倍率 * char.get_skill_by_name("血影之太刀精通").加成倍率1('')
        if 武器类型 == "短剑":
            短剑精通 = char.get_skill_by_name("魔性之短剑精通")
            self.power1 = 通用被动倍率 * \
                短剑精通.加成倍率1('') * (2.0 if 短剑精通.等级 >= 25 else 1.0)
            self.灼伤power0 = self.感电power0 = 短剑精通.额外倍率1()
        if 武器类型 == "钝器":
            self.power1 = 通用被动倍率 * char.get_skill_by_name("波动之钝器精通").加成倍率1('')
        return super().等效百分比(**argv)


class 技能14(主动技能):
    名称 = '破军旋舞斩'
    备注 = '蓄气'
    所在等级 = 35
    等级上限 = 70
    学习间隔 = 3
    等级精通 = 60

    data0 = [int(i*1.050) for i in [0, 2203, 2554, 2906, 3256, 3608, 3959, 4310, 4662, 5013, 5364, 5715, 6067, 6418, 6770, 7120, 7471, 7823, 8174, 8526, 8877, 9228, 9579, 9930, 10282, 10633, 10984, 11335, 11687, 12038, 12390, 12741, 13091, 13443, 13794,
                                    14146, 14497, 14848, 15199, 15550, 15902, 16253, 16605, 16955, 17307, 17658, 18010, 18361, 18711, 19063, 19414, 19766, 20117, 20468, 20819, 21170, 21522, 21873, 22225, 22575, 22927, 23278, 23630, 23981, 24331, 24683, 25034, 25386, 25737, 26089, 26439]]
    hit0 = 3
    CD = 15.0
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    MP = [110, 924]
    无色消耗 = 1

    形态 = ["蓄力", "普通"]

    def 形态变更(self, 形态, char):
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        if 形态 == "蓄力":
            self.power0 = 1.2
        if 形态 == "普通":
            self.power0 = 1

    def 装备护石(self):
        self.倍率 *= 1.33


class 技能15(主动技能):
    名称 = '雷鸣千军破'
    所在等级 = 40
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60

    data0 = [int(i*1.054) for i in [0, 472, 520, 568, 616, 664, 712, 760, 809, 856, 904, 952, 1000, 1049, 1096, 1144, 1191, 1239, 1288, 1335, 1384, 1431, 1480, 1528, 1576, 1624, 1671, 1720, 1767, 1815, 1863, 1911, 1959, 2008,
                                    2055, 2103, 2151, 2199, 2248, 2295, 2344, 2391, 2438, 2487, 2534, 2583, 2630, 2679, 2727, 2775, 2823, 2872, 2919, 2967, 3015, 3062, 3111, 3158, 3207, 3254, 3302, 3351, 3398, 3447, 3494, 3543, 3591, 3639, 3686, 3733, 3782]]
    hit0 = 3
    data1 = [int(i*1.054) for i in [0, 472, 520, 568, 616, 664, 712, 760, 809, 856, 904, 952, 1000, 1049, 1096, 1144, 1191, 1239, 1288, 1335, 1384, 1431, 1480, 1528, 1576, 1624, 1671, 1720, 1767, 1815, 1863, 1911, 1959, 2008,
                                    2055, 2103, 2151, 2199, 2248, 2295, 2344, 2391, 2438, 2487, 2534, 2583, 2630, 2679, 2727, 2775, 2823, 2872, 2919, 2967, 3015, 3062, 3111, 3158, 3207, 3254, 3302, 3351, 3398, 3447, 3494, 3543, 3591, 3639, 3686, 3733, 3782]]
    hit1 = 8
    data2 = [int(i*1.054) for i in [0, 584, 643, 703, 762, 821, 881, 940, 1000, 1059, 1119, 1178, 1237, 1297, 1356, 1416, 1475, 1535, 1594, 1653, 1713, 1772, 1832, 1891, 1950, 2009, 2068, 2128, 2187, 2247, 2306, 2366, 2425, 2483,
                                    2544, 2602, 2663, 2721, 2781, 2840, 2899, 2959, 3018, 3078, 3137, 3197, 3256, 3315, 3375, 3433, 3493, 3552, 3612, 3671, 3731, 3790, 3849, 3909, 3968, 4028, 4087, 4147, 4206, 4265, 4325, 4384, 4444, 4503, 4563, 4622, 4680]]
    hit2 = 8
    data3 = [int(i*1.054) for i in [0, 919, 1013, 1107, 1199, 1293, 1386, 1480, 1572, 1666, 1759, 1853, 1945, 2039, 2132, 2226, 2318, 2412, 2505, 2599, 2691, 2785, 2879, 2972, 3064, 3158, 3252, 3345, 3438, 3531, 3625, 3718, 3811,
                                    3904, 3998, 4091, 4184, 4277, 4371, 4464, 4557, 4650, 4744, 4838, 4930, 5024, 5117, 5211, 5303, 5397, 5490, 5584, 5676, 5770, 5863, 5957, 6049, 6143, 6236, 6330, 6422, 6516, 6609, 6703, 6795, 6889, 6983, 7076, 7169, 7262, 7356]]
    hit3 = 0
    CD = 20.0
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    MP = [50, 840]
    无色消耗 = 1

    def 等效百分比(self, **argv):
        武器类型 = argv.get('武器类型', '')
        if 武器类型 == '钝器':
            self.hit0 = 1
            self.hit1 = 8
            self.hit2 = 8
            self.hit3 = 1
        else:
            self.hit0 = 3
            self.hit1 = 8
            self.hit2 = 8
            self.hit3 = 0
        return super().等效百分比(**argv)

    def 装备护石(self):
        self.power0 = 1.21
        self.hit1 += 2
        self.power1 = 1.21
        self.hit2 += 2


class 技能16(主动技能):
    名称 = '恶即斩'
    备注 = '连按'
    所在等级 = 45
    等级上限 = 70
    学习间隔 = 2
    等级精通 = 60

    data0 = [int(i*1.050) for i in [0, 888, 978, 1069, 1158, 1249, 1339, 1429, 1519, 1609, 1699, 1790, 1879, 1970, 2060, 2150, 2240, 2330, 2420, 2510, 2600, 2690, 2781, 2870, 2961, 3051, 3141, 3231, 3321, 3411, 3502, 3591, 3682, 3772,
                                    3862, 3952, 4043, 4132, 4223, 4312, 4403, 4493, 4583, 4673, 4764, 4853, 4944, 5034, 5124, 5214, 5304, 5394, 5485, 5574, 5665, 5755, 5845, 5935, 6026, 6115, 6206, 6295, 6386, 6476, 6566, 6656, 6747, 6836, 6927, 7016, 7107]]
    hit0 = 15  # 不连按为13
    data1 = [int(i*1.050) for i in [0, 7304, 8046, 8787, 9528, 10269, 11010, 11750, 12491, 13232, 13973, 14714, 15456, 16197, 16938, 17679, 18420, 19161, 19902, 20643, 21384, 22126, 22867, 23608, 24349, 25090, 25830, 26571, 27312, 28053, 28795, 29536, 30277, 31018,
                                    31759, 32500, 33241, 33982, 34723, 35465, 36206, 36947, 37688, 38429, 39170, 39910, 40651, 41392, 42133, 42875, 43616, 44357, 45098, 45839, 46580, 47321, 48062, 48803, 49545, 50286, 51027, 51768, 52509, 53250, 53990, 54731, 55472, 56214, 56955, 57696, 58437]]
    hit1 = 1
    CD = 40.0
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1
    CP武器 = False

    MP = [120, 2024]
    无色消耗 = 2

    def 等效百分比(self, **argv):
        武器类型 = argv.get('武器类型', '')
        char: Character = argv.get('char', {})
        if 武器类型 == '巨剑' and not self.CP武器:
            self.power1 = char.get_skill_by_name("毁灭之巨剑精通").额外倍率1()
        return super().等效百分比(**argv)

    def 装备护石(self):
        self.power0 = 1.19
        self.hit1 = 1.38
        self.CDR *= 0.95


class 技能17(被动技能):
    名称 = '斩魂术'
    所在等级 = 48
    等级上限 = 50
    学习间隔 = 3
    等级精通 = 40

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(0.995 + 0.03 + 0.02 * self.等级, 5)


class 技能18(主动技能):
    名称 = '极·驭剑术(时空斩)'
    所在等级 = 50
    等级上限 = 50
    学习间隔 = 5
    等级精通 = 40

    data0 = [int(i) for i in [0, 11212, 13813, 16413, 19012, 21614, 24213, 26813, 29414, 32013, 34614, 37214, 39814, 42415, 45014, 47614, 50215, 52814, 55414, 58015, 60615, 63216, 65815, 68415, 71016, 73616, 76215, 78816, 81416, 84015, 86617, 89216, 91817, 94417, 97016, 99618, 102217,
                              104816, 107418, 110017, 112616, 115218, 117817, 120418, 123018, 125617, 128219, 130818, 133419, 136019, 138618, 141219, 143819, 146420, 149019, 151619, 154220, 156820, 159419, 162020, 164620, 167220, 169820, 172420, 175021, 177620, 180221, 182821, 185421, 188021, 190621]]
    hit0 = 3
    data1 = [int(i) for i in [0, 22426, 27626, 32827, 38026, 43226, 48427, 53628, 58827, 64027, 69228, 74429, 79628, 84828, 90029, 95230, 100429, 105629, 110830, 116031, 121230, 126431, 131631, 136830, 142031, 147232, 152433, 157631, 162832, 168033, 173234, 178432, 183633, 188834, 194034,
                              199235, 204434, 209635, 214835, 220036, 225235, 230436, 235636, 240837, 246037, 251236, 256437, 261638, 266838, 272037, 277238, 282439, 287638, 292839, 298039, 303240, 308439, 313640, 318840, 324040, 329240, 334441, 339642, 344840, 350041, 355242, 360443, 365642, 370842, 376043, 381244]]
    hit1 = 1
    CD = 145.0

    MP = [980, 8232]
    无色消耗 = 5


class 技能19(主动技能):
    名称 = '裂刃天冲'
    所在等级 = 60
    等级上限 = 50
    学习间隔 = 2
    等级精通 = 40

    data0 = [int(i*1.053) for i in [0, 3358, 3699, 4039, 4380, 4721, 5062, 5403, 5743, 6084, 6425, 6766, 7106, 7446, 7788, 8128, 8469, 8809, 9151, 9491, 9832, 10173, 10514, 10855, 11195, 11535, 11876, 12217, 12558, 12898, 13240, 13580, 13921, 14261, 14603,
                                    14944, 15284, 15624, 15965, 16306, 16646, 16987, 17328, 17669, 18010, 18350, 18691, 19033, 19373, 19713, 20053, 20395, 20735, 21076, 21416, 21758, 22099, 22439, 22780, 23121, 23462, 23803, 24142, 24484, 24824, 25165, 25505, 25847, 26188, 26528, 26869]]
    hit0 = 1
    data1 = [int(i*1.053) for i in [0, 524, 577, 631, 683, 738, 791, 843, 897, 950, 1004, 1056, 1111, 1164, 1216, 1270, 1323, 1376, 1429, 1482, 1535, 1588, 1643, 1696, 1749, 1802, 1855, 1908, 1961, 2016, 2068, 2122, 2175, 2228,
                                    2281, 2334, 2388, 2440, 2495, 2548, 2600, 2654, 2707, 2760, 2813, 2868, 2921, 2973, 3027, 3080, 3133, 3186, 3239, 3292, 3345, 3400, 3452, 3506, 3559, 3612, 3665, 3718, 3773, 3825, 3879, 3932, 3984, 4038, 4091, 4144, 4197]]
    hit1 = 9     # 怪物高度低会变成8
    data2 = [int(i*1.053) for i in [0, 9235, 10173, 11110, 12046, 12985, 13921, 14857, 15795, 16732, 17669, 18605, 19544, 20480, 21416, 22354, 23291, 24229, 25165, 26101, 27040, 27976, 28913, 29850, 30788, 31724, 32660, 33599, 34535, 35472, 36409, 37346, 38283, 39220,
                                    40158, 41094, 42032, 42968, 43905, 44843, 45779, 46717, 47654, 48590, 49527, 50465, 51402, 52338, 53276, 54213, 55149, 56087, 57024, 57961, 58897, 59834, 60772, 61708, 62646, 63582, 64519, 65457, 66393, 67332, 68268, 69205, 70141, 71079, 72016, 72952, 73890]]
    hit2 = 1
    CD = 30.0
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    MP = [400, 1500]
    无色消耗 = 1

    形态 = ["满", "常规"]

    def 形态变更(self, 形态, char: Character):
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        if 形态 == "满":
            self.hit0 = 1
            self.hit1 = 9
            self.hit2 = 1
        if 形态 == "常规":
            self.hit0 = 1
            self.hit1 = 8
            self.hit2 = 1

    def 装备护石(self):
        self.power0 = 0
        self.power1 = 0
        self.power2 = 2.28
        self.CDR *= 0.95


class 技能20(主动技能):
    名称 = '极·驭剑术(幻剑阵)'
    所在等级 = 70
    等级上限 = 50
    学习间隔 = 2
    等级精通 = 40

    data0 = [int(i*1.051) for i in [0, 3997, 4402, 4808, 5214, 5620, 6025, 6430, 6836, 7241, 7648, 8053, 8459, 8864, 9269, 9676, 10081, 10487, 10892, 11298, 11704, 12109, 12515, 12920, 13325, 13730, 14137, 14542, 14947, 15353, 15758, 16165, 16570, 16976, 17381,
                                    17786, 18193, 18598, 19004, 19409, 19815, 20220, 20626, 21032, 21437, 21843, 22248, 22655, 23060, 23465, 23870, 24275, 24681, 25087, 25493, 25898, 26304, 26709, 27114, 27521, 27926, 28332, 28737, 29144, 29549, 29954, 30360, 30765, 31171, 31577, 31983]]
    hit0 = 4
    data1 = [int(i*1.051) for i in [0, 15990, 17613, 19236, 20858, 22479, 24102, 25725, 27346, 28969, 30592, 32214, 33835, 35458, 37081, 38703, 40325, 41948, 43570, 45192, 46814, 48437, 50059, 51682, 53303, 54926, 56548, 58171, 59793, 61415, 63037, 64659, 66282, 67904, 69527,
                                    71150, 72772, 74393, 76016, 77638, 79260, 80883, 82506, 84127, 85749, 87372, 88995, 90616, 92239, 93861, 95484, 97105, 98728, 100351, 101974, 103595, 105217, 106840, 108461, 110084, 111707, 113330, 114950, 116573, 118196, 119818, 121440, 123063, 124685, 126306, 127929]]
    hit1 = 1
    CD = 50.0
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    MP = [800, 1680]
    无色消耗 = 2

    def 装备护石(self):
        self.hit0 = 0
        self.hit1 = 4
        self.power1 = 0.63


class 技能21(主动技能):
    名称 = '飓风魔剑'
    所在等级 = 75
    等级上限 = 50
    学习间隔 = 2
    等级精通 = 40

    # 伤害组成除了本身，还有堆叠的魔剑奥义层数，
    data0 = [int(i*1.051) for i in [0, 470, 518, 566, 613, 660, 708, 756, 803, 852, 899, 947, 994, 1043, 1090, 1137, 1186, 1233, 1281, 1328, 1377, 1423, 1471, 1519, 1567, 1614, 1662, 1710, 1758, 1805, 1854, 1901, 1949, 1997,
                                    2045, 2092, 2139, 2187, 2234, 2282, 2330, 2378, 2425, 2473, 2521, 2569, 2616, 2665, 2712, 2760, 2807, 2856, 2903, 2951, 2998, 3045, 3093, 3140, 3189, 3236, 3284, 3332, 3380, 3427, 3476, 3523, 3571, 3618, 3667, 3714, 3761]]
    hit0 = 40
    data1 = [int(i*1.051) for i in [0, 8263, 9101, 9939, 10777, 11615, 12454, 13293, 14129, 14968, 15807, 16645, 17484, 18322, 19159, 19998, 20837, 21674, 22513, 23351, 24189, 25028, 25866, 26704, 27542, 28381, 29218, 30057, 30896, 31733, 32572, 33410, 34248, 35087,
                                    35926, 36762, 37601, 38440, 39278, 40117, 40954, 41793, 42631, 43470, 44308, 45145, 45984, 46823, 47661, 48499, 49338, 50175, 51014, 51852, 52690, 53529, 54368, 55205, 56043, 56882, 57720, 58559, 59396, 60234, 61073, 61912, 62750, 63587, 64426, 65264, 66103]]
    hit1 = 1
    魔剑层数 = 5
    单层倍率 = 0.03
    奥义倍率 = 1.15      # 魔剑奥义额外增伤，每层0.03
    CD = 25.0
    是否有护石 = 1

    MP = [580, 4500]
    无色消耗 = 3

    形态 = ["5层", "4层", "3层", "2层", "1层", "0层"]

    def 形态变更(self, 形态, char: Character):
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        self.魔剑层数 = int(形态[:1])
        if '飓风魔剑' in char.护石栏:
            self.魔剑层数 = min(self.魔剑层数, 3)
        self.奥义倍率 = 1 + self.单层倍率 * self.魔剑层数

    def 装备护石(self):
        self.power0 = 1.15
        self.power1 = 1.65
        self.单层倍率 = 0.05

    def 等效百分比(self, **argv):
        # 额外计算魔剑奥义伤害
        char = argv.get('char', {})
        伤害类型 = argv.get('伤害类型', '直伤')
        魔剑 = char.get_skill_by_name('魔剑奥义').等效百分比(伤害类型=伤害类型)
        return super().等效百分比(**argv)*self.奥义倍率 + 魔剑 * self.魔剑层数


class 技能22(被动技能):
    名称 = '帝皇盟约'
    所在等级 = 75
    等级上限 = 50
    学习间隔 = 3
    等级精通 = 40

    def 物理攻击力倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.28 + 0.02 * self.等级, 5)


class 技能23(主动技能):
    名称 = '极·驭剑术(破剑阵)'
    所在等级 = 80
    等级上限 = 50
    学习间隔 = 2
    等级精通 = 40

    data0 = [int(i*1.052) for i in [0, 1570, 1729, 1888, 2048, 2207, 2367, 2526, 2686, 2845, 3003, 3163, 3322, 3482, 3641, 3801, 3960, 4120, 4279, 4438, 4597, 4756, 4916, 5075, 5235, 5394, 5554, 5713, 5872, 6031, 6191, 6350, 6508, 6668, 6828,
                                    6988, 7147, 7306, 7465, 7625, 7784, 7942, 8102, 8263, 8422, 8581, 8740, 8899, 9059, 9218, 9377, 9536, 9695, 9856, 10014, 10174, 10333, 10493, 10652, 10811, 10970, 11130, 11290, 11449, 11608, 11767, 11927, 12086, 12245, 12404, 12564]]
    hit0 = 0
    data1 = [int(i*1.052) for i in [0, 3141, 3459, 3779, 4097, 4416, 4733, 5052, 5371, 5690, 6008, 6327, 6646, 6965, 7284, 7602, 7920, 8239, 8558, 8876, 9195, 9513, 9833, 10152, 10470, 10789, 11106, 11427, 11744, 12063, 12381, 12700, 13019, 13338, 13657,
                                    13975, 14295, 14613, 14932, 15249, 15568, 15887, 16206, 16524, 16843, 17162, 17481, 17800, 18117, 18436, 18755, 19074, 19392, 19711, 20029, 20349, 20668, 20986, 21305, 21622, 21943, 22260, 22579, 22897, 23216, 23535, 23854, 24173, 24491, 24811, 25129]]
    hit1 = 0
    data2 = [int(i*1.052) for i in [0, 21988, 24218, 26449, 28680, 30910, 33140, 35372, 37602, 39834, 42063, 44294, 46524, 48755, 50986, 53215, 55447, 57677, 59909, 62139, 64370, 66600, 68831, 71061, 73293, 75523, 77753, 79984, 82215, 84445, 86677, 88906, 91138, 93368, 95599, 97830,
                                    100061, 102290, 104522, 106752, 108983, 111214, 113444, 115674, 117906, 120136, 122366, 124597, 126827, 129059, 131289, 133520, 135751, 137981, 140211, 142443, 144673, 146904, 149134, 151365, 153595, 155827, 158057, 160287, 162518, 164749, 166980, 169211, 171441, 173672, 175902]]
    hit2 = 0
    data3 = [int(i*1.052) for i in [0, 5637, 6209, 6782, 7354, 7925, 8497, 9070, 9642, 10213, 10785, 11358, 11929, 12501, 13073, 13646, 14217, 14789, 15361, 15933, 16505, 17077, 17649, 18222, 18794, 19366, 19936, 20510, 21082, 21654, 22224, 22798, 23370, 23942,
                                    24513, 25086, 25658, 26229, 26801, 27374, 27946, 28517, 29089, 29662, 30233, 30805, 31377, 31950, 32521, 33093, 33665, 34238, 34809, 35381, 35953, 36525, 37097, 37669, 38241, 38813, 39385, 39957, 40528, 41101, 41673, 42245, 42816, 43389, 43961, 44532, 45104]]
    hit3 = 8
    CD = 45.0
    是否有护石 = 1

    MP = [800, 6000]
    无色消耗 = 5

    形态 = ["满", "中断"]

    def 形态变更(self, 形态, char: Character):
        if 形态 == '' and len(self.形态) > 0:
            形态 = self.形态[0]
        if 形态 == "中断" and '极·驭剑术(破剑阵)' not in char.护石栏:
            形态 = "满"
        if 形态 == "中断":
            self.hit0 = 0
            self.hit1 = 0
            self.hit2 = 0
            self.hit3 = 8
        if 形态 == "满":
            self.hit0 = 7
            self.hit1 = 7
            self.hit2 = 1
            self.hit3 = 0
            if '极·驭剑术(破剑阵)' in char.护石栏:
                self.hit0 = 0
                self.hit1 = 0
                self.hit2 = 1
                self.power2 = 3.35
                self.hit3 = 0

    def 装备护石(self):
        self.power3 = 1.34


class 技能24(主动技能):
    名称 = '誓约之剑：雷沃汀'
    所在等级 = 85
    等级上限 = 50
    学习间隔 = 5
    等级精通 = 40

    data0 = [int(i) for i in [0, 111600, 137477, 163355, 189233, 215112, 240990, 266868, 292747, 318625, 344503, 370382, 396260, 422138, 448017, 473895, 499773, 525652, 551530, 577408, 603286, 629165, 655043, 680920, 706799, 732677, 758555, 784434, 810312, 836190, 862069, 887947, 913825, 939703, 965582, 991460, 1017338,
                              1043217, 1069095, 1094973, 1120852, 1146730, 1172608, 1198487, 1224364, 1250242, 1276120, 1301999, 1327877, 1353755, 1379634, 1405512, 1431390, 1457269, 1483147, 1509025, 1534904, 1560782, 1586660, 1612539, 1638417, 1664295, 1690174, 1716052, 1741930, 1767807, 1793686, 1819564, 1845442, 1871321, 1897199]]
    hit0 = 1
    CD = 180.0

    MP = [2500, 5000]
    无色消耗 = 10


class 技能25(主动技能):
    名称 = '极诣·驭剑术：聚魔剑'
    所在等级 = 95
    等级上限 = 50
    学习间隔 = 2
    等级精通 = 40

    data0 = [int(i) for i in [0, 25058, 27600, 30142, 32685, 35227, 37769, 40311, 42853, 45396, 47939, 50481, 53023, 55565, 58108, 60650, 63192, 65734, 68276, 70819,
                              73361, 75903, 78445, 80987, 83530, 86072, 88614, 91156, 93698, 96240, 98783, 101325, 103867, 106409, 108951, 111494, 114036, 116578, 119120, 121662, 124205]]
    hit0 = 1
    data1 = [int(i) for i in [0, 7344, 8089, 8834, 9579, 10324, 11069, 11814, 12559, 13304, 14049, 14795, 15540, 16286, 17031, 17776, 18521, 19266, 20011, 20756,
                              21501, 22246, 22991, 23736, 24481, 25226, 25971, 26716, 27461, 28206, 28951, 29696, 30441, 31188, 31933, 32678, 33423, 34168, 34913, 35658, 36403]]
    hit1 = 4
    data2 = [int(i) for i in [0, 44067, 48537, 53008, 57478, 61949, 66419, 70890, 75361, 79831, 84301, 88773, 93243, 97713, 102185, 106655, 111125, 115595, 120067, 124537,
                              129007, 133478, 137949, 142419, 146890, 151360, 155831, 160302, 164772, 169243, 173713, 178184, 182654, 187125, 191596, 196066, 200536, 205008, 209478, 213948, 218418]]
    hit2 = 1
    CD = 60

    MP = [773, 6000]
    无色消耗 = 7


class 技能26(被动技能):
    名称 = '剑心：魔剑觉醒'
    所在等级 = 95
    等级上限 = 50
    学习间隔 = 3
    等级精通 = 40

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)


class 技能27(主动技能):
    名称 = '誓约之引：万剑之巅'
    所在等级 = 100
    等级上限 = 50
    学习间隔 = 5
    等级精通 = 40

    data0 = [int(i) for i in [0, 18198, 22419, 26639, 30858, 35079, 39299, 43519, 47739, 51959, 56179, 60399, 64620, 68839, 73059, 77280, 81499, 85719, 89940, 94159, 98380,
                              102600, 106819, 111040, 115260, 119481, 123700, 127920, 132141, 136360, 140580, 144801, 149020, 153241, 157461, 161680, 165901, 170121, 174341, 178561, 182781]]
    hit0 = 4
    data1 = [int(i) for i in [0, 127393, 156934, 186473, 216014, 245555, 275095, 304635, 334176, 363717, 393257, 422797, 452338, 481878, 511419, 540960, 570499, 600040, 629581, 659122,
                              688661, 718202, 747743, 777283, 806824, 836364, 865904, 895445, 924986, 954525, 984066, 1013607, 1043148, 1072687, 1102228, 1131769, 1161309, 1190850, 1220390, 1249930, 1279471]]
    hit1 = 1
    data2 = [int(i) for i in [0, 10919, 13451, 15983, 18514, 21047, 23579, 26111, 28643, 31176, 33707, 36239, 38771, 41303, 43836, 46367, 48900, 51431, 53964, 56496,
                              59027, 61560, 64091, 66624, 69156, 71688, 74220, 76751, 79284, 81816, 84348, 86880, 89413, 91944, 94476, 97008, 99540, 102073, 104604, 107137, 109668]]
    hit2 = 15
    CD = 290.0

    MP = [4028, 8056]
    无色消耗 = 15


class classChange(Character):
    def __init__(self):
        self.实际名称 = 'sword_master'
        self.名称 = '极诣·驭剑士'
        self.角色 = '鬼剑士(女)'
        self.角色类型 = '输出'
        self.职业 = '驭剑士'
        self.武器选项 = ['巨剑', '短剑', '太刀', '钝器']
        self.输出类型选项 = ['物理百分比']
        self.防具精通属性 = ['力量']
        self.类型 = '物理百分比'
        self.武器类型 = '巨剑'
        self.防具类型 = '轻甲'
        技能列表 = []
        技能序号 = {}
        i = 0
        while i >= 0:
            try:
                tem = eval('技能'+str(i)+'()')
                tem.基础等级计算()
                技能序号[tem.名称] = i
                技能列表.append(tem)
                i += 1
            except:
                i = -1
        self.技能栏 = 技能列表
        self.技能序号 = 技能序号
        self.buff = 1.71

        super().__init__()

    def set_skill_info(self, info, rune_except=[], clothes_pants=[]):
        super().set_skill_info(info, rune_except=[
            '魔剑奥义'])
